home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 001 / pibt40s1.arc / INITMODE.MOD < prev    next >
Text File  |  1987-05-19  |  6KB  |  160 lines

  1. (*----------------------------------------------------------------------*)
  2. (*               Initialize_Modem --- Initialize Modem                  *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. PROCEDURE Initialize_Modem;
  6.  
  7. (*----------------------------------------------------------------------*)
  8. (*                                                                      *)
  9. (*     Procedure:  Initialize_Modem                                     *)
  10. (*                                                                      *)
  11. (*     Purpose:    Initializes Modem                                    *)
  12. (*                                                                      *)
  13. (*     Calling Sequence:                                                *)
  14. (*                                                                      *)
  15. (*        Initialize_Modem;                                             *)
  16. (*                                                                      *)
  17. (*     Calls:                                                           *)
  18. (*                                                                      *)
  19. (*        Modem_Connected                                               *)
  20. (*                                                                      *)
  21. (*----------------------------------------------------------------------*)
  22.  
  23. VAR
  24.    Done_Flag : BOOLEAN;
  25.    F         : TEXT;
  26.    Ch        : CHAR;
  27.    Do_Init   : BOOLEAN;
  28.  
  29. (*----------------------------------------------------------------------*)
  30. (*               Modem_Connected --- Check if modem connected           *)
  31. (*----------------------------------------------------------------------*)
  32.  
  33. FUNCTION Modem_Connected : BOOLEAN;
  34.  
  35. VAR
  36.    Start_Time: REAL;
  37.    Timed_Out : BOOLEAN;
  38.  
  39. BEGIN (* Modem_Connected *)
  40.                                    (* Turn on OUT2, DTR, and RTS *)
  41.  
  42.    Port[UART_MCR + Async_Base] := $0B;
  43.  
  44.                                    (* Clear pending async errors   *)
  45.    Async_Clear_Errors;
  46.                                    (* Wait for DSR using Busy Wait *)
  47.    Start_Time := TimeOfDay;
  48.    Timed_Out  := FALSE;
  49.  
  50.    IF Async_Do_DSR THEN
  51.       BEGIN
  52.          WHILE ( NOT Timed_Out )  AND
  53.                ( ( Port[UART_MSR + Async_Base] AND $20 ) = 0 ) DO
  54.             Timed_Out := ( TimeDiff( Start_Time , TimeOfDay ) > 2.0 );
  55.          IF Timed_Out THEN
  56.             IF Attended_Mode THEN
  57.                BEGIN
  58.                   Async_Do_DSR := YesNo('*** Data set ready doesn''t work, turn ' +
  59.                                         'it off (Y/N) ? ');
  60.                   WRITELN;
  61.                   Timed_Out := Async_Do_DSR;
  62.                END
  63.             ELSE
  64.                WRITELN('*** Data set ready turned off.');
  65.       END;
  66.                                    (* Wait for CTS using Busy Wait *)
  67.    Start_Time := TimeOfDay;
  68.  
  69.    IF Async_Do_CTS THEN
  70.       BEGIN
  71.          WHILE ( NOT Timed_Out )  AND
  72.                ( ( Port[UART_MSR + Async_Base] AND $10 ) = 0 ) DO
  73.             Timed_Out := ( TimeDiff( Start_Time , TimeOfDay ) > 2.0 );
  74.          IF Timed_Out THEN
  75.             IF Attended_Mode THEN
  76.                BEGIN
  77.                   Async_Do_CTS := YesNo('*** Clear to send doesn''t work, turn ' +
  78.                                         'it off (Y/N) ? ');
  79.                   WRITELN;
  80.                   Timed_Out := Async_Do_CTS;
  81.                END
  82.             ELSE
  83.                WRITELN('*** Clear to send turned off.');
  84.       END;
  85.  
  86.                                    (* Wait for Transmit Hold Register Empty (THRE) *)
  87.    Start_Time := TimeOfDay;
  88.  
  89.    WHILE ( NOT Timed_Out ) AND
  90.          ( ( Port[UART_LSR + Async_Base] AND $20 ) = 0 ) DO
  91.       Timed_Out := ( TimeDiff( Start_Time , TimeOfDay ) > 2.0 );
  92.  
  93.                                    (* If we looped through, modem probably *)
  94.                                    (* not connected.                       *)
  95.  
  96.    Modem_Connected := ( NOT Timed_Out );
  97.  
  98. END   (* Modem_Connected *);
  99.  
  100. (*----------------------------------------------------------------------*)
  101.  
  102. BEGIN (* Initialize_Modem *)
  103.                                    (* Check status of hardware lines *)
  104.    IF NOT Modem_Connected THEN
  105.       BEGIN
  106.          IF ( NOT Hard_Wired ) THEN
  107.             BEGIN
  108.                WRITELN('*** Modem appears to be turned off.');
  109.                WRITELN('*** Please turn it on and then hit any key to continue.');
  110.             END
  111.          ELSE
  112.             BEGIN
  113.                WRITELN('*** Hard-wired connection may be bad.');
  114.                WRITELN('*** You may want to turn off CTS and DSR checking.');
  115.                WRITELN('*** Hit any key to continue.');
  116.             END;
  117.          IF Attended_Mode THEN
  118.             BEGIN
  119.                Read_Kbd( Ch );
  120.                IF ( Ch = CHR( ESC ) ) AND KeyPressed THEN
  121.                   READ( Kbd, Ch );
  122.             END
  123.          ELSE
  124.             WRITELN('*** Continuing anyway because of unattended mode.');
  125.       END;
  126.                                    (* Issue modem initialization string *)
  127.  
  128.    IF ( Modem_Init <> '' ) AND ( NOT Hard_Wired ) THEN
  129.       BEGIN
  130.  
  131.          IF Async_Carrier_Detect THEN
  132.             BEGIN
  133.                WRITE('*** Session appears to be already in progress.');
  134.                IF Attended_Mode THEN
  135.                   BEGIN
  136.                      Do_Init := YesNo('*** Send modem initialization anyway (Y/N) ? ');
  137.                      WRITELN;
  138.                   END
  139.                ELSE
  140.                   BEGIN
  141.                      WRITELN('*** Modem initialization not performed.');
  142.                      Do_Init := FALSE;
  143.                   END;
  144.             END
  145.          ELSE
  146.             Do_Init := TRUE;
  147.  
  148.          IF Do_Init THEN
  149.             BEGIN
  150.                WRITELN;
  151.                WRITELN('Modem initialization: ',Write_Ctrls( Modem_Init ) );
  152.                Send_Modem_Command( Modem_Init );
  153.                DELAY( One_Second_Delay );
  154.                Async_Purge_Buffer;
  155.             END;
  156.  
  157.       END;
  158.  
  159. END   (* Initialize_Modem *);
  160.